package cn.lyjuan.pojoutils.template;

import cn.lyjuan.pojoutils.bean.ColumnBean;
import cn.lyjuan.pojoutils.bean.TableBean;

import java.util.List;

/**
 * 生成 Mapper 接口的模版接口
 * Created by ly on 2014/11/21.
 */
public interface IMapperTemplate
{
    /**
     * 生成 Mapper 接口类，调用该方法即可获取完整类，内部需要分别依次调用<br />
     * genSelect、genInsert、genUpdate 和 genDelete
     * @param tableBean
     * @param cols
     * @return
     */
    String genMapperInterface(TableBean tableBean, List<ColumnBean> cols);
    /**
     * 生成查询接口部分，包含
     * 1. select 查询单个
     * 2. selects 查询列表
     * 3. selectBy{主键}，根据主键查询单个，如果没有主键，则没有该方法
     * 4. selecgForPage 分页查询
     * @param tableBean
     * @return
     */
    String genSelect(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成添加接口部分，包含
     * 1. insert 根据POJO对象添加表数据
     * @param tableBean
     * @param cols
     * @return
     */
    String genInsert(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成更新接口部分，包含
     * 1. updateBy{主键} 根据主键更新，如果没有主键，则没有该方法
     * @param tableBean
     * @param cols
     * @return
     */
    String genUpdate(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成删除接口部分，包含
     * 1. deleteBy{主键} 根据主键删除，如果没有主键，则没有该方法
     * 2. delete 根据POJO对象删除
     * @param tableBean
     * @param cols
     * @return
     */
    String genDelete(TableBean tableBean, List<ColumnBean> cols);
}
